package utils;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.CompressionLevel;
import net.lingala.zip4j.model.enums.CompressionMethod;
import org.apache.commons.io.FileUtils;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;

@Slf4j
public class UploadUtils {
    @SneakyThrows
    public static void main(String[] args) {
        String titles =
                "Spring Boot中MySQL 6种批量更新效率比较\n" +
                        "MySQL批量更新：6种方式对比，你知道哪种最快吗？\n" +
                        "10万条数据下MySQL批量更新6种方式的性能测试\n" +
                        "Spring Boot中6种MySQL批量更新方式的优劣分析\n" +
                        "Mysql批量更新：6种方式的效率对比\n" +
                        "MySQL批量更新实战：6种方式效率PK\n" +
                        "6种MySQL批量更新方式的优缺点比较\n" +
                        "6种MySQL批量更新方式的速度究竟如何？\n" +
                        "从效率角度看6种MySQL批量更新方式的优劣\n" +
                        "6种MySQL批量更新方式的实现原理及效率比较\n" +
                        "Spring Boot中六种批量更新方法效率对比\n" +
                        "MySQL批量更新性能大比拼：六种方法的实战测试\n" +
                        "深度解析：Spring Boot下六种批量更新策略的效率对比\n" +
                        "如何选择最优的批量更新方案？六种方法效率对比解析\n" +
                        "Spring Boot中批量更新效率探究：六种方法的性能测试\n" +
                        "MySQL批量更新效率对比：原生MyBatis、MyBatis-Plus与JdbcTemplate等六种方法\n" +
                        "Spring Boot中六种批量更新策略：效率对决与实测\n" +
                        "MySQL批量更新技术大比拼：六种方法谁主沉浮？\n" +
                        "深入探索：Spring Boot下六种批量更新方法的性能对比\n" +
                        "批量更新效率之争：MyBatis、MyBatis-Plus与JdbcTemplate等六法比较\n" +
                        "性能实测：Spring Boot中六种批量更新技术谁更快？\n" +
                        "六种批量更新方案，哪种更适合你的Spring Boot应用？\n" +
                        "对比六种批量更新方法，优化你的Spring Boot数据库操作\n" +
                        "实战分析：六种批量更新方法在Spring Boot中的性能差异\n" +
                        "Spring Boot数据库批量更新：六种方案，一场效率之战\n" +
                        "性能巅峰对决：Spring Boot六种批量更新策略横向对比\n" +
                        "Spring Boot性能优化：批量更新技术详解与效率提升指南\n" +
                        "知识领域：Spring Boot性能优化\n" +
                        "数据库性能调优：六种批量更新策略对比与选择\n" +
                        "Spring Boot框架下高效批量更新实践\n" +
                        "MyBatis与JdbcTemplate批量更新性能对比研究\n" +
                        "大数据量下批量更新技术探索与最佳实践\n" +
                        "MyBatis-Plus批量更新优化技巧与案例分析\n" +
                        "Spring Boot中JdbcTemplate的批量更新优化策略\n" +
                        "数据库性能瓶颈突破：批量更新技术的创新应用\n" +
                        "Spring Boot应用性能调优实战：批量更新篇\n" +
                        "数据库高效更新技术：六种批量更新方法对比与应用\n" +
                        "springboot mysql 批量更新 springboot batch批量更新\n" +
                        "springboot 批量更新_Spring Boot：操作数据库\n" +
                        "性能测试:Spring Boot中MySQL 6种批量更新效率比较";
        packageZip(titles);
//        String sourceDescription = "Spring Boot与OpenCV的整合为开发者们带来了强大的图像处理能力。详细介绍如何在Spring Boot项目中集成OpenCV库(免安装),无敌opencv越学越爽";
//
//        // 切换到浏览器
//        MyRobot robot = new MyRobot();
//        robot.moveAndClick(OpenCVUtil.findImage4persistently(OpenCVUtil.desktopMat(), OpenCVUtil.read("C:\\Users\\Administrator\\Desktop\\csdn\\robot\\upload\\360.png")));
//        Thread.sleep(3000);
//        for (String title : titles.split("\n")) {
//            OpenCVUtil.uploadSource2CSDN(title+".zip",sourceDescription);
//        }
    }

    private static void packageZip(String titles) throws IOException {
        // 源目录
        File srcDir = new File("C:\\Users\\Administrator\\Desktop\\csdn\\付费资源\\batch-update");
        BufferedReader bufferedReader = new BufferedReader(new FileReader(srcDir+"\\readme.txt"));
        List<String> collect = bufferedReader.lines().collect(Collectors.toList());
        bufferedReader.close();
        for (String title : new HashSet<>(Arrays.asList(titles.split("\n")))) {
            try {
                String pathname = "C:\\Users\\Administrator\\Desktop\\csdn\\付费资源\\待上传\\" + title;
                File destDir = new File(pathname);
                FileUtils.copyDirectory(srcDir, destDir);
                // 修改readme
                collect.set(0,title);
                BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(pathname+"\\readme.txt"));
                for (String s : collect) {
                    bufferedWriter.write(s);
                    bufferedWriter.write("\n");
                }
                bufferedWriter.flush();
                bufferedReader.close();
                // 压缩
                ZipFile zipFile = new ZipFile(pathname + ".zip");
                ZipParameters parameters = new ZipParameters();
                parameters.setCompressionMethod(CompressionMethod.STORE);
                parameters.setCompressionLevel(CompressionLevel.FASTEST);
                // 添加文件夹到压缩文件，包括子文件夹和文件
                zipFile.addFolder(destDir, parameters);
            }catch (Exception e){
                log.error(title+e.getMessage());

            }
        }
        log.info("打包完成");
    }
    public static void packageZip(String zipFileFullName,String folder) throws IOException {
        // 压缩包位置
        ZipFile zipFile = new ZipFile(zipFileFullName);
        // 添加文件夹到压缩文件，包括子文件夹和文件
        zipFile.addFolder(new File(folder));
    }
}
